home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ For TASM / USRGUIDE.PAK / AVERAGE.ASM < prev    next >
Assembly Source File  |  1996-02-21  |  2KB  |  44 lines

  1. ; Turbo Assembler example. Copyright (c) 1993 By Borland International, Inc.
  2. ;
  3. ; AVERAGE.ASM
  4. ;
  5. ; Borland C++-callable small-model function that returns the average
  6. ; of a set of integer values. Calls the Borland C++ function
  7. ; IntDivide() to perform the final division.
  8. ;
  9. ; Function prototype:
  10. ;     extern float Average(int far * ValuePtr, int NumberOfValues);
  11. ;
  12. ; Input:
  13. ;     int far * ValuePtr:          ;the array of values to average
  14. ;     int NumberOfValues:          ;the number of values to average
  15. ;
  16. ; Usage: bcc calcavg.cpp average.asm
  17. ;
  18. ; From the Turbo Assembler User's Guide. 
  19. ;  Ch. 18: - Interfacing Turbo Assembler with Borland C++
  20.  
  21.         .MODEL  SMALL
  22.         EXTRN   _IntDivide:PROC
  23.         .CODE
  24.         PUBLIC  _Average
  25. _Average        PROC
  26.         push    bp
  27.         mov     bp,sp
  28.         les     bx,[bp+4]          ;point ES:BX to array of values
  29.         mov     cx,[bp+8]          ;# of values to average
  30.         mov     ax,0               ;clear the running total
  31. AverageLoop:
  32.         add     ax,es:[bx]         ;add the current value
  33.         add     bx,2               ;point to the next value
  34.         loop    AverageLoop
  35.         push    WORD PTR [bp+8]    ;get back the number of values passed to
  36.                                    ; IntDivide as the rightmost    parameter
  37.         push    ax                 ;pass the total as the leftmost parameter
  38.         call    _IntDivide         ;calculate the floating-point average
  39.         add     sp,4               ;discard the parameters
  40.         pop     bp
  41.         ret                        ;the average is in the 8087's TOS register
  42. _Average        ENDP
  43.         END
  44.